Android网络通信:最全面的HTTP知识总结

前言

HTTP网络通信协议在任何的开发工作中都起到非常重要的作用,今天,我们来讲解下关于HTTP的相关知识。


目录

5分钟全面了解HTTP相关知识.png


计算机网络相关知识

计算机网络体系结构分为五层,自上而下分别是应用、运输、网络、数据链路和物理层,如下图:

五层协议体系结构

HTTP存在于最高层的应用层,简单介绍下应用层:

  • 作用
    通过应用层协议定义应用进程间(运行的程序)的通信规则

    应用层协议主要有HTTP、SMTP、FTP协议等等

  • 交互的数据单元称为报文

  • 基本上是基于C/S方式

HTTP介绍

1. 定义

即HyperText Transfer Protocol,超文本传输协议,属于应用层协议的一种

2. 作用

规定了应用进程间通信(请求&响应)的准则

3. 特点

  • 无连接:HTTP本身是无连接的,即交换HTTP报文前不需要建立HTTP连接
  • 无状态:HTTP协议是无状态的:数据传输过程中,并不保存任何历史信息和状态信息。无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTPP请求。
  • 传输可靠性高:采用TCP作为运输层协议(面向连接、可靠传输),即交换报文时需要预先建立TCP连接
  • 兼容性好:支持B/S模式及C/S模式;
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST
  • 灵活:HTTP 允许传输任意类型的数据对象

4. 工作方式

HTTP协议采用了请求/响应的工作方式,工作流程如图:
index.png

5. HTTP报文详解

HTTP的报文分为请求报文和响应报文

5.1 HTTP请求报文

HTTP请求报文的组成

HTTP请求报文组成.png

  • 请求行:用于声明”请求报文“、主机域名、资源路径和协议版本
  • 请求头:说明客户端、服务器或报文的部分信息
  • 请求体:用于存放需要发送给服务器的数据信息
1. 请求行
  • 组成

请求行的组成

空格不能省

  • 组成介绍

1.1 请求方法
即对请求对象的操作,请求方法有8种:

方法类别 意义
OPTION 请求“选项”的信息
HEAD 请求读取”URL标志信息的首部“信息
GET 请求读取“URL标志的信息“的信息
POST 为服务器添加信息
PUT 为指定的URL下添加(存储)一个文档
DELETE 删除指定URL所标志的信息
TRACE 用于进行环回测试的请求报文
CONNECT 用于代理服务器

最常用的就是GET和POST方法

1.2 请求路径
要了解请求地址,先来了解下URL概念:

  • 定义:Uniform Resoure Locator,统一资源定位符,是一种自愿位置的抽象唯一识别方法。
  • 作用:用于表示资源位置和访问这些资源的方法
  • 组成:
    <协议>://<主机>:<端口>/<路径>
    1. 协议:采用的应用层通信协议,比如在HTTP协议下的URL地址:
      HTTP://<主机>:<端口>/<路径>
    2. 主机:请求资源所在主机的域名
    3. 端口和路径有时可以省略(HTTP默认端口号是80)

从上面可以了解到,路径则是端口号后面符号”/“的部分,下面举例

URL(统一资源定位符) PATH(路径)
http://www.baidu.com/ /
http://www.weibo.com/2874748/home /2874748/home

1.3 协议版本
HTTP协议版本主要是1.0、1.1、2.0

具体区别这里不多解释,大家有兴趣可以去了解下

请求行举例

先假设:

2. 请求头
  • 作用:说明客户端、服务器或报文的部分信息
  • 使用方式:采用”header(字段名):value(值)“的方式
  • 常用请求头
    1. 请求和响应报文的通用Header

请求和响应报文的通用Header

2. 常见请求Header

常见请求Header

3. 请求体
  • 作用:用于存放需要发送给服务器的数据信息
  • 使用方式:目前来说,一共有三种

1. 数据交换格式
请求体是可以是任意类型的,但服务器需要额外进行解析,如JSON

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{"skill":{
"web":[
{
"name":"html",
"year":"5"
},
{
"name":"ht",
"year":"4"
}],
"database":[
{
"name":"h",
"year":"2"
}]
`}}

想详细了解Android开发中的JSON解析可以看下我写的另外一篇文章:
Android开发:JSON简介及最全面解析方法!

2.键值对形式
键与值之间用”=“连接,每个键值对间用&连接,且只能用ASCII字符,如Query String

1
key1=value1&key2&value2

3. 分部分形式
请求体被分为多个部分,应用场景是文件上传,比如邮件上传等等

  • 每段以– {boundary}开头
  • 然后是该段的描述头
  • 描述头之后空一行接内容
  • 每段以– {boundary}–结束

如下:

分部分格式

请求报文实例

结合上述说的请求行、请求头和请求体,现假设

  • URL地址为:http://www.tsinghua.edu.cn/chn/yxsz/index.htm
  • 请求报文采用GET方法
  • 请求报文采用HTTP1.1版本
  • 请求报文希望表明主机域名和用户代理是使用Netscape浏览器
  • 请求体采用键值对形式

则请求报文如下:

请求报文

5.2HTTP响应报文

HTTP响应报文的组成

HTTP响应报文组成.png

从上面可以看出,与请求报文相比,除了第一行(请求行VS状态行)以外,响应报文的其他结构与请求报文非常相似。其中,响应体是用于存放需要返回给客户端的数据信息的。

1. 状态行
  • 组成

状态行组成

其中,空格不能省

1.1 协议版本
HTTP协议版本主要是1.0、1.1、2.0

具体区别这里不多解释,大家有兴趣可以去了解下

1.2 状态码
状态码分为5大类:

类别 含义
1xx 表示信息通知,如请求收到了或正在进行处理
2xx 表示成功,如接受或知道了
3xx 表示重定向,如要完成请求还必须采取进一步行动
4xx 客户的差错,如请求中有错误的语法或不能完成:404
5xx 表示服务器的差错,如服务器失效无法完成请求

1.3 状态信息
对状态码的简单解释

具体详细的状态码信息可以看状态码详解

状态行举例

  • HTTP/1.1 202 Accepted(接受)
  • HTTP/1.1 301 Bad Request(永久性转移)
  • HTTP/1.1 404 Not Found(找不到)
2. 响应头
  • 作用:说明客户端、服务器或报文的部分信息
  • 使用方式:采用”header(字段名):value(值)“的方式
  • 常用请求头
    1. 请求和响应报文的通用Header

请求和响应报文的通用Header

2. 常见响应Header

常见响应Header

3. 响应体
  • 作用:用于存放需要返回给客户端的数据信息
  • 使用方式:和请求体是一致的,同样分为:任意类型的数据交换格式、键值对形式和分部分形式,这里不作过多描述。

总结

本文对HTTP的基础知识进行了的讲解,详细、易懂而清晰。接下来我会介绍继续介绍Android开发中的相关知识,有兴趣可以继续关注Carson_Ho的安卓开发笔记


欢迎关注Carson_Ho的简书!

不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度

文章目录
  1. 1. 前言
  2. 2. 目录
  3. 3. 计算机网络相关知识
  4. 4. HTTP介绍
    1. 4.0.0.1. 1. 定义
    2. 4.0.0.2. 2. 作用
    3. 4.0.0.3. 3. 特点
    4. 4.0.0.4. 4. 工作方式
    5. 4.0.0.5. 5. HTTP报文详解
    6. 4.0.0.6. 5.1 HTTP请求报文
      1. 4.0.0.6.0.1. HTTP请求报文的组成
    7. 4.0.0.6.1. 1. 请求行
  • 5. 请求行举例
    1. 5.0.0.0.1. 2. 请求头
    2. 5.0.0.0.2. 3. 请求体
  • 5.0.0.1. 请求报文实例
  • 5.0.1. 5.2HTTP响应报文
    1. 5.0.1.0.0.1. HTTP响应报文的组成
  • 5.0.1.0.1. 1. 状态行
  • 5.0.2. 状态行举例
    1. 5.0.2.0.1. 2. 响应头
    2. 5.0.2.0.2. 3. 响应体
  • 5.0.3. 总结
  • 5.0.4. 欢迎关注Carson_Ho的简书!
  • ,